package com.xinke.juc.sguigu.case01;

import com.xinke.juc.sguigu.util.Sleep;
import lombok.extern.slf4j.Slf4j;

/**
 * @Author：xinke
 * @Date：2025/10/9
 * @Desc: 线程分类（一般不做特别说明配置，默认都是用户线程）：
 * ○ 用户线程：是系统的工作线程，它会完成这个程序需要完成的业务操作。
 * ○ 守护线程：是一种特殊的线程为其他线程服务的，在后台默默地完成一些系统性的任务，比如垃圾回收线程就是最典型的例子。
 * 守护线程作为一个服务线程，没有服务对象就没有必要继续运行了，如果用户线程全部结束了，意味着程序需要完成的业务操作已经结束了，系统可以退出了。
 * 所以假如当系统只剩下守护线程的时候，守护线程伴随着JVM一同结束工作。
 */
@Slf4j
public class DaemonDemo {
    public static void main(String[] args) {
        Thread t = new Thread(() -> {
            log.info(Thread.currentThread().getName()+" 开始运行,"+(Thread.currentThread().isDaemon()?"守护线程":"用户线程"));
            while (true) {
                //...
            }

        }, "t");
        t.setDaemon(true);//通过设置属性Daemon来设置当前线程是否为守护线程
        t.start();
        Sleep.seconds(3);
        log.info("主线程结束");
    }
}
/**
 * 输出：t 开始运行,守护线程
 * main 主线程结束--->在main主线程结束后，守护线程会伴随着JVM一同结束工作，即使还有循环没有结束
 */